from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from ansible_management.models import AnsibleConfig, AnsibleGlobalSetting
from ansible_management.utils import AnsibleGlobalSettingsManager


class Command(BaseCommand):
    help = '初始化Ansible管理的默认数据'

    def handle(self, *args, **options):
        self.stdout.write('开始初始化Ansible管理数据...')
        
        # 1. 初始化全局设置
        self.stdout.write('初始化全局设置...')
        AnsibleGlobalSettingsManager.initialize_default_settings()
        self.stdout.write(self.style.SUCCESS('✓ 全局设置初始化完成'))
        
        # 2. 创建默认配置（如果不存在）
        self.stdout.write('创建默认配置...')
        
        # 获取第一个超级用户作为创建者
        admin_user = User.objects.filter(is_superuser=True).first()
        if not admin_user:
            self.stdout.write(self.style.WARNING('警告：未找到超级用户，请先创建超级用户'))
            return
        
        # 检查是否已有默认配置
        if not AnsibleConfig.objects.filter(is_default=True).exists():
            default_config = AnsibleConfig.objects.create(
                name='默认本地配置',
                description='默认的本地Ansible配置',
                host='localhost',
                port=22,
                username='root',
                auth_type='password',
                password='',  # 需要用户手动设置
                ansible_config_path='/etc/ansible/ansible.cfg',
                inventory_path='/etc/ansible/hosts',
                is_active=True,
                is_default=True,
                health_status='unknown',
                created_by=admin_user
            )
            self.stdout.write(self.style.SUCCESS(f'✓ 创建默认配置: {default_config.name}'))
        else:
            self.stdout.write('默认配置已存在，跳过创建')
        
        # 3. 显示统计信息
        config_count = AnsibleConfig.objects.count()
        setting_count = AnsibleGlobalSetting.objects.count()
        
        self.stdout.write('\n' + '='*50)
        self.stdout.write('初始化完成！')
        self.stdout.write(f'配置数量: {config_count}')
        self.stdout.write(f'设置数量: {setting_count}')
        self.stdout.write('='*50)
        
        self.stdout.write('\n提示：')
        self.stdout.write('1. 请在Web界面中配置默认配置的密码或密钥')
        self.stdout.write('2. 可以通过健康检查测试配置是否正常')
        self.stdout.write('3. 可以添加更多的Ansible实例配置')
